<?PHP
class BinarySearch{
	/*
		검색하는 함수
	*/
	public function search($find,$array){
		return $this->searchInRange($find,$array,0,(count($array)-1));
	}
	/*
		초기 처음값과 마지막값 설정 및 빈값일 경우 예외처리
	*/
	public function searchInRange($find,$array,$start,$end){
		$idx = $this->getHalfIndex($start,$end);
		$val = $array[$idx];
		echo sprintf("find : %d, start : %d, end : %d, Half : %d \n",$find,$start,$end,$idx);
		if($this->isEqual($find,$val)){
			return $idx;
		}else{
			if($this->isSmall($start,$end)){
				return -1;
			}
			if($this->isSmall($find,$val)){
				return $this->searchInRange($find,$array,$idx+1,$end);
			}else{
				return $this->searchInRange($find,$array,$start,$idx-1);
			}
		}
	}
	
	/*
		중간이 몇번째인지 확인하는 함수
	*/
	protected function getHalfIndex($start,$end){
		$array_num = $start+$end;
		$array_num = $array_num/2;
		return intval($array_num);
	}
	/*
		원하는 데이터인지 찾는 함수
	*/
	protected function isEqual($a, $b){
		return $a == $b;
	}
	
	/*
		 비교해서 작은지 확인
	*/
	protected function isSmall($a, $b){
		return $a > $b;
	}
}

$a = Array(1,3,4,6,7,9,11,13);
$bs = new BinarySearch();
$findedIdx = $bs->search(10, $a);
echo $findedIdx;


?>